/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOCajaChica;
import pe.com.cotelasa.scp.dao.IDAODocumentoSustentador;
import pe.com.cotelasa.scp.dao.IDAOMovimientoCajaChica;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioCajaChica;
import pe.com.cotelasa.scp.entidad.CajaChica;
import pe.com.cotelasa.scp.entidad.Contacto;
import pe.com.cotelasa.scp.entidad.DocumentoSustentador;
import pe.com.cotelasa.scp.entidad.MovimientoCajaChica;
import pe.com.cotelasa.scp.entidad.Sede;

/**
 *
 * @author DESARROLLO01
 */
@Service
public class ServicioCajaChicaImpl implements IServicioCajaChica, Serializable {

    private static final long serialVersionUID = -4727188952267726785L;
    @Inject
    private IDAOCajaChica daoCajaChica;
    @Inject
    private IDAOMovimientoCajaChica daoMovimientoCajaChica;
    @Inject
    private IDAODocumentoSustentador daoDocumentoSustentador;

    @Override
    public void registrarCajaChica(CajaChica cajaChica) throws ServiceException {

        try {
            cajaChica.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            daoCajaChica.insertar(cajaChica);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }


    }

    @Override
    public Collection<CajaChica> listarCajaChicaActivas() throws ServiceException {

        try {

            return daoCajaChica.listarActivos(CajaChica.class);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }

    }

    @Override
    public Collection<CajaChica> listarCajaChicaPorFiltro(CajaChica cajaChica, Date fechaInicio, Date fechaFinal) throws ServiceException {

        try {
            return daoCajaChica.listarCajaChicaPorFiltro(cajaChica,fechaInicio,fechaFinal);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }

    }

    @Override
    public Collection<MovimientoCajaChica> listarTodosMovCajaChica(CajaChica cajaChica) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void eliminarCajaChica(CajaChica cajaChica) throws ServiceException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ResultadoServicio actualizarCajaChica(CajaChica cajaChica) throws ServiceException {

        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoCajaChica.actualizar(cajaChica);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public Collection<CajaChica> obtenerCajaChicaBusqueda(CajaChica cajaChica) throws ServiceException {

        try {
            return daoCajaChica.listarCajasChicasBusqueda(cajaChica);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }


    }

    @Override
    public Collection<CajaChica> listarCajaChicaCerradaPorSede(CajaChica cajaChica) throws ServiceException {

        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            //if (cajaChica.getIdSede() != null) {
            parametro.put("idSede", cajaChica.getIdSede().getId());
            //
            parametro.put("estadoCaja", 'C');
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoCajaChica.obtenerColeccionEntidadPorFiltros(CajaChica.class, parametro);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }

    }
    
    @Override
    public Collection<CajaChica> listarCajaCerradaPorSedeConSaldo(CajaChica cajaChica) throws ServiceException {

        try {
            return daoCajaChica.listarCajaCerradaPorSedeConSaldo(cajaChica);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }


    }

    @Override
    public CajaChica conseguirCajaChicaPorId(Integer idCajaChica) throws ServiceException {
        try {
            return daoCajaChica.obtenerEntidadPorId(CajaChica.class, idCajaChica);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public List<CajaChica> listarCajaChicaPorSede(Sede idSede, String nombre) throws ServiceException {

        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("idSede", idSede.getId());
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            parametro.put("nombre", nombre);
            return (List<CajaChica>)daoCajaChica.obtenerColeccionEntidadPorFiltros(CajaChica.class, parametro);

        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }
}
